/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package nodeLevelMetaModel.impl;

import nodeLevelMetaModel.AggregationTask;
import nodeLevelMetaModel.BaseStationRole;
import nodeLevelMetaModel.FusionTask;
import nodeLevelMetaModel.LeaderRole;
import nodeLevelMetaModel.MemberRole;
import nodeLevelMetaModel.Node;
import nodeLevelMetaModel.NodeLevelMetaModelFactory;
import nodeLevelMetaModel.NodeLevelMetaModelPackage;
import nodeLevelMetaModel.OperationalTask;
import nodeLevelMetaModel.ReceivingTask;
import nodeLevelMetaModel.Role;
import nodeLevelMetaModel.SamplingTask;
import nodeLevelMetaModel.SendingTask;
import nodeLevelMetaModel.SpatialAggregationTask;
import nodeLevelMetaModel.TemporalAggregationTask;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EGenericType;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;

import org.eclipse.emf.ecore.impl.EPackageImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class NodeLevelMetaModelPackageImpl extends EPackageImpl implements NodeLevelMetaModelPackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass nodeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass roleEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass leaderRoleEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass baseStationRoleEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass memberRoleEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass operationalTaskEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass receivingTaskEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass sendingTaskEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass samplingTaskEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass aggregationTaskEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass fusionTaskEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass spatialAggregationTaskEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass temporalAggregationTaskEClass = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see nodeLevelMetaModel.NodeLevelMetaModelPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private NodeLevelMetaModelPackageImpl() {
		super(eNS_URI, NodeLevelMetaModelFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
	 * 
	 * <p>This method is used to initialize {@link NodeLevelMetaModelPackage#eINSTANCE} when that field is accessed.
	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static NodeLevelMetaModelPackage init() {
		if (isInited) return (NodeLevelMetaModelPackage)EPackage.Registry.INSTANCE.getEPackage(NodeLevelMetaModelPackage.eNS_URI);

		// Obtain or create and register package
		NodeLevelMetaModelPackageImpl theNodeLevelMetaModelPackage = (NodeLevelMetaModelPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof NodeLevelMetaModelPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new NodeLevelMetaModelPackageImpl());

		isInited = true;

		// Create package meta-data objects
		theNodeLevelMetaModelPackage.createPackageContents();

		// Initialize created meta-data
		theNodeLevelMetaModelPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theNodeLevelMetaModelPackage.freeze();

  
		// Update the registry and return the package
		EPackage.Registry.INSTANCE.put(NodeLevelMetaModelPackage.eNS_URI, theNodeLevelMetaModelPackage);
		return theNodeLevelMetaModelPackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getNode() {
		return nodeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getNode_Id() {
		return (EAttribute)nodeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getNode_Location() {
		return (EAttribute)nodeEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getNode_Name0() {
		return (EReference)nodeEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getRole() {
		return roleEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getRole_DeploymentCondition() {
		return (EAttribute)roleEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getRole_Name1() {
		return (EReference)roleEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getLeaderRole() {
		return leaderRoleEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLeaderRole_Name2() {
		return (EReference)leaderRoleEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLeaderRole_Name3() {
		return (EReference)leaderRoleEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLeaderRole_Name4() {
		return (EReference)leaderRoleEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getLeaderRole_MemberIds() {
		return (EAttribute)leaderRoleEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getBaseStationRole() {
		return baseStationRoleEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getBaseStationRole_Name5() {
		return (EReference)baseStationRoleEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getBaseStationRole_Name6() {
		return (EReference)baseStationRoleEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getMemberRole() {
		return memberRoleEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getMemberRole_Name7() {
		return (EReference)memberRoleEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getMemberRole_Name8() {
		return (EReference)memberRoleEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getMemberRole_Name9() {
		return (EReference)memberRoleEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getOperationalTask() {
		return operationalTaskEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getOperationalTask_Function() {
		return (EAttribute)operationalTaskEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getOperationalTask_Name10() {
		return (EReference)operationalTaskEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getOperationalTask_Name11() {
		return (EReference)operationalTaskEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getReceivingTask() {
		return receivingTaskEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getReceivingTask_Protocol() {
		return (EAttribute)receivingTaskEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getReceivingTask_ReceiveDataType() {
		return (EAttribute)receivingTaskEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getReceivingTask_Compress() {
		return (EAttribute)receivingTaskEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getReceivingTask_Encryption() {
		return (EAttribute)receivingTaskEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getReceivingTask_Name12() {
		return (EReference)receivingTaskEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getReceivingTask_Name13() {
		return (EReference)receivingTaskEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getSendingTask() {
		return sendingTaskEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSendingTask_Protocol() {
		return (EAttribute)sendingTaskEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSendingTask_SendDataType() {
		return (EAttribute)sendingTaskEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSendingTask_TransmissionCondition() {
		return (EAttribute)sendingTaskEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSendingTask_Compress() {
		return (EAttribute)sendingTaskEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSendingTask_Encryption() {
		return (EAttribute)sendingTaskEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getSendingTask_Name14() {
		return (EReference)sendingTaskEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getSendingTask_Name15() {
		return (EReference)sendingTaskEClass.getEStructuralFeatures().get(6);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getSendingTask_Name16() {
		return (EReference)sendingTaskEClass.getEStructuralFeatures().get(7);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getSamplingTask() {
		return samplingTaskEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSamplingTask_DataType() {
		return (EAttribute)samplingTaskEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSamplingTask_SamplingCondition() {
		return (EAttribute)samplingTaskEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getSamplingTask_Name17() {
		return (EReference)samplingTaskEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getAggregationTask() {
		return aggregationTaskEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAggregationTask_InputDataType() {
		return (EAttribute)aggregationTaskEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFusionTask() {
		return fusionTaskEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFusionTask_OutputDataType() {
		return (EAttribute)fusionTaskEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFusionTask_InputDataTypes() {
		return (EAttribute)fusionTaskEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getSpatialAggregationTask() {
		return spatialAggregationTaskEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTemporalAggregationTask() {
		return temporalAggregationTaskEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTemporalAggregationTask_TimeWindow() {
		return (EAttribute)temporalAggregationTaskEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTemporalAggregationTask_Duration() {
		return (EAttribute)temporalAggregationTaskEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getTemporalAggregationTask_Name18() {
		return (EReference)temporalAggregationTaskEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public NodeLevelMetaModelFactory getNodeLevelMetaModelFactory() {
		return (NodeLevelMetaModelFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		nodeEClass = createEClass(NODE);
		createEAttribute(nodeEClass, NODE__ID);
		createEAttribute(nodeEClass, NODE__LOCATION);
		createEReference(nodeEClass, NODE__NAME0);

		roleEClass = createEClass(ROLE);
		createEAttribute(roleEClass, ROLE__DEPLOYMENT_CONDITION);
		createEReference(roleEClass, ROLE__NAME1);

		leaderRoleEClass = createEClass(LEADER_ROLE);
		createEReference(leaderRoleEClass, LEADER_ROLE__NAME2);
		createEReference(leaderRoleEClass, LEADER_ROLE__NAME3);
		createEReference(leaderRoleEClass, LEADER_ROLE__NAME4);
		createEAttribute(leaderRoleEClass, LEADER_ROLE__MEMBER_IDS);

		baseStationRoleEClass = createEClass(BASE_STATION_ROLE);
		createEReference(baseStationRoleEClass, BASE_STATION_ROLE__NAME5);
		createEReference(baseStationRoleEClass, BASE_STATION_ROLE__NAME6);

		memberRoleEClass = createEClass(MEMBER_ROLE);
		createEReference(memberRoleEClass, MEMBER_ROLE__NAME7);
		createEReference(memberRoleEClass, MEMBER_ROLE__NAME8);
		createEReference(memberRoleEClass, MEMBER_ROLE__NAME9);

		operationalTaskEClass = createEClass(OPERATIONAL_TASK);
		createEAttribute(operationalTaskEClass, OPERATIONAL_TASK__FUNCTION);
		createEReference(operationalTaskEClass, OPERATIONAL_TASK__NAME10);
		createEReference(operationalTaskEClass, OPERATIONAL_TASK__NAME11);

		receivingTaskEClass = createEClass(RECEIVING_TASK);
		createEAttribute(receivingTaskEClass, RECEIVING_TASK__PROTOCOL);
		createEAttribute(receivingTaskEClass, RECEIVING_TASK__RECEIVE_DATA_TYPE);
		createEAttribute(receivingTaskEClass, RECEIVING_TASK__COMPRESS);
		createEAttribute(receivingTaskEClass, RECEIVING_TASK__ENCRYPTION);
		createEReference(receivingTaskEClass, RECEIVING_TASK__NAME12);
		createEReference(receivingTaskEClass, RECEIVING_TASK__NAME13);

		sendingTaskEClass = createEClass(SENDING_TASK);
		createEAttribute(sendingTaskEClass, SENDING_TASK__PROTOCOL);
		createEAttribute(sendingTaskEClass, SENDING_TASK__SEND_DATA_TYPE);
		createEAttribute(sendingTaskEClass, SENDING_TASK__TRANSMISSION_CONDITION);
		createEAttribute(sendingTaskEClass, SENDING_TASK__COMPRESS);
		createEAttribute(sendingTaskEClass, SENDING_TASK__ENCRYPTION);
		createEReference(sendingTaskEClass, SENDING_TASK__NAME14);
		createEReference(sendingTaskEClass, SENDING_TASK__NAME15);
		createEReference(sendingTaskEClass, SENDING_TASK__NAME16);

		samplingTaskEClass = createEClass(SAMPLING_TASK);
		createEAttribute(samplingTaskEClass, SAMPLING_TASK__DATA_TYPE);
		createEAttribute(samplingTaskEClass, SAMPLING_TASK__SAMPLING_CONDITION);
		createEReference(samplingTaskEClass, SAMPLING_TASK__NAME17);

		aggregationTaskEClass = createEClass(AGGREGATION_TASK);
		createEAttribute(aggregationTaskEClass, AGGREGATION_TASK__INPUT_DATA_TYPE);

		fusionTaskEClass = createEClass(FUSION_TASK);
		createEAttribute(fusionTaskEClass, FUSION_TASK__OUTPUT_DATA_TYPE);
		createEAttribute(fusionTaskEClass, FUSION_TASK__INPUT_DATA_TYPES);

		spatialAggregationTaskEClass = createEClass(SPATIAL_AGGREGATION_TASK);

		temporalAggregationTaskEClass = createEClass(TEMPORAL_AGGREGATION_TASK);
		createEAttribute(temporalAggregationTaskEClass, TEMPORAL_AGGREGATION_TASK__TIME_WINDOW);
		createEAttribute(temporalAggregationTaskEClass, TEMPORAL_AGGREGATION_TASK__DURATION);
		createEReference(temporalAggregationTaskEClass, TEMPORAL_AGGREGATION_TASK__NAME18);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		leaderRoleEClass.getESuperTypes().add(this.getRole());
		baseStationRoleEClass.getESuperTypes().add(this.getRole());
		memberRoleEClass.getESuperTypes().add(this.getRole());
		aggregationTaskEClass.getESuperTypes().add(this.getOperationalTask());
		fusionTaskEClass.getESuperTypes().add(this.getOperationalTask());
		spatialAggregationTaskEClass.getESuperTypes().add(this.getAggregationTask());
		temporalAggregationTaskEClass.getESuperTypes().add(this.getAggregationTask());

		// Initialize classes and features; add operations and parameters
		initEClass(nodeEClass, Node.class, "Node", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getNode_Id(), ecorePackage.getEString(), "id", null, 0, 1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getNode_Location(), ecorePackage.getEString(), "location", null, 0, 1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getNode_Name0(), this.getRole(), null, "name0", null, 0, -1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(roleEClass, Role.class, "Role", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getRole_DeploymentCondition(), ecorePackage.getEString(), "deploymentCondition", null, 0, 1, Role.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getRole_Name1(), this.getNode(), null, "name1", null, 1, -1, Role.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(leaderRoleEClass, LeaderRole.class, "LeaderRole", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getLeaderRole_Name2(), this.getSendingTask(), null, "name2", null, 1, -1, LeaderRole.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getLeaderRole_Name3(), this.getReceivingTask(), null, "name3", null, 1, -1, LeaderRole.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getLeaderRole_Name4(), this.getOperationalTask(), null, "name4", null, 0, 1, LeaderRole.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		EGenericType g1 = createEGenericType(ecorePackage.getEEList());
		EGenericType g2 = createEGenericType();
		g1.getETypeArguments().add(g2);
		initEAttribute(getLeaderRole_MemberIds(), g1, "memberIds", null, 0, 1, LeaderRole.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(baseStationRoleEClass, BaseStationRole.class, "BaseStationRole", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getBaseStationRole_Name5(), this.getReceivingTask(), null, "name5", null, 1, -1, BaseStationRole.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getBaseStationRole_Name6(), this.getOperationalTask(), null, "name6", null, 0, 1, BaseStationRole.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(memberRoleEClass, MemberRole.class, "MemberRole", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getMemberRole_Name7(), this.getSamplingTask(), null, "name7", null, 1, 1, MemberRole.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getMemberRole_Name8(), this.getSendingTask(), null, "name8", null, 1, -1, MemberRole.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getMemberRole_Name9(), this.getTemporalAggregationTask(), null, "name9", null, 0, 1, MemberRole.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(operationalTaskEClass, OperationalTask.class, "OperationalTask", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getOperationalTask_Function(), ecorePackage.getEString(), "function", null, 0, 1, OperationalTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getOperationalTask_Name10(), this.getLeaderRole(), null, "name10", null, 0, 1, OperationalTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getOperationalTask_Name11(), this.getBaseStationRole(), null, "name11", null, 0, 1, OperationalTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(receivingTaskEClass, ReceivingTask.class, "ReceivingTask", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getReceivingTask_Protocol(), ecorePackage.getEString(), "protocol", null, 0, 1, ReceivingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getReceivingTask_ReceiveDataType(), ecorePackage.getEString(), "receiveDataType", null, 0, 1, ReceivingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getReceivingTask_Compress(), ecorePackage.getEString(), "compress", null, 0, 1, ReceivingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getReceivingTask_Encryption(), ecorePackage.getEString(), "encryption", null, 0, 1, ReceivingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getReceivingTask_Name12(), this.getLeaderRole(), null, "name12", null, 0, 1, ReceivingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getReceivingTask_Name13(), this.getBaseStationRole(), null, "name13", null, 0, 1, ReceivingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(sendingTaskEClass, SendingTask.class, "SendingTask", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getSendingTask_Protocol(), ecorePackage.getEString(), "protocol", null, 0, 1, SendingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getSendingTask_SendDataType(), ecorePackage.getEString(), "sendDataType", null, 0, 1, SendingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getSendingTask_TransmissionCondition(), ecorePackage.getEString(), "transmissionCondition", null, 0, 1, SendingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getSendingTask_Compress(), ecorePackage.getEString(), "compress", null, 0, 1, SendingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getSendingTask_Encryption(), ecorePackage.getEString(), "encryption", null, 0, 1, SendingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getSendingTask_Name14(), this.getLeaderRole(), null, "name14", null, 0, 1, SendingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getSendingTask_Name15(), this.getMemberRole(), null, "name15", null, 0, 1, SendingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getSendingTask_Name16(), this.getReceivingTask(), null, "name16", null, 0, 1, SendingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(samplingTaskEClass, SamplingTask.class, "SamplingTask", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getSamplingTask_DataType(), ecorePackage.getEString(), "dataType", null, 0, 1, SamplingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getSamplingTask_SamplingCondition(), ecorePackage.getEString(), "samplingCondition", null, 0, 1, SamplingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getSamplingTask_Name17(), this.getMemberRole(), null, "name17", null, 1, 1, SamplingTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(aggregationTaskEClass, AggregationTask.class, "AggregationTask", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getAggregationTask_InputDataType(), ecorePackage.getEString(), "inputDataType", null, 0, 1, AggregationTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(fusionTaskEClass, FusionTask.class, "FusionTask", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getFusionTask_OutputDataType(), ecorePackage.getEString(), "outputDataType", null, 0, 1, FusionTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		g1 = createEGenericType(ecorePackage.getEEList());
		g2 = createEGenericType();
		g1.getETypeArguments().add(g2);
		initEAttribute(getFusionTask_InputDataTypes(), g1, "inputDataTypes", null, 0, 1, FusionTask.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(spatialAggregationTaskEClass, SpatialAggregationTask.class, "SpatialAggregationTask", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(temporalAggregationTaskEClass, TemporalAggregationTask.class, "TemporalAggregationTask", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getTemporalAggregationTask_TimeWindow(), ecorePackage.getEInt(), "timeWindow", null, 0, 1, TemporalAggregationTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getTemporalAggregationTask_Duration(), ecorePackage.getEInt(), "duration", null, 0, 1, TemporalAggregationTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getTemporalAggregationTask_Name18(), this.getMemberRole(), null, "name18", null, 0, 1, TemporalAggregationTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		// Create resource
		createResource(eNS_URI);
	}

} //NodeLevelMetaModelPackageImpl
